#include <iostream>
using namespace std;

//构造函数的调用规则
//1、创建一个类，c++编译器会给每一个类都添加至少 3个函数
//  默认构造（空实现）
//  析构函数（空实现）
//  拷贝构造（值拷贝）

//2、
//如果我们写了有参构造函数，编译器就不再提供默认构造，依然会提供拷贝构造
//如果我们提供了拷贝构造函数，那么编译器就不再提供其他普通构造函数

class Person
{
public:
    int age;
    
    Person()
    {
        cout << "Person 默认构造函数调用" << endl;
    }

    Person(int Age)
    {
        cout << "Person 有参构造函数调用" << endl;
        age = Age;
    }

    Person(const Person& p)
    {
        age = p.age;
        cout << "Person 拷贝构造函数调用" << endl;
    }

    ~Person()
    {
        cout << "Person 析构函数调用" << endl;
    }
};

void test1()
{
    Person p;
    p.age = 18;

    Person p2(p);

    cout << "p2的年龄为：" << p2.age << endl;
}

void test2()
{
    //如果我们只写了有参构造
    Person p1(18);

    Person p2(p1);
}

int main()
{
    test1();
    
    return 0;
}